package com.com.yunzong.rainbowbridge.exception;

import android.content.Context;


import java.io.ByteArrayOutputStream;
import java.io.PrintStream;


/**
 * 异常处理器
 * Created by xiongzhuang on 2018/1/12.
 */

public class CrashHandler implements Thread.UncaughtExceptionHandler {



    private static CrashHandler sInstance = new CrashHandler();
    private Thread.UncaughtExceptionHandler mDefaultCrashHandler;

    private CrashHandler() {
    }

    public static CrashHandler getInstance() {
        return sInstance;
    }

    public void init(Context context) {
        mDefaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    /**
     * 当程序中出现有未被捕获的异常，系统将会自动调用#uncaughtException方法
     *
     * @param thread 出现未捕获异常的线程
     * @param ex     未捕获异常（有了这个ex,可以得到异常信息）
     */
    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        if (!handleException(ex) && mDefaultCrashHandler != null) {
            //如果用户没有处理则让系统默认的异常处理器来处理
            mDefaultCrashHandler.uncaughtException(thread, ex);
        } else {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
//                LogBackUtil.e("error->exception:" + e);
            }
            //退出程序
            android.os.Process.killProcess(android.os.Process.myPid());
//            System.exit(1);
        }
    }

    /**
     * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
     *
     * @return true:如果处理了该异常信息;否则返回false.
     */
    private boolean handleException(Throwable ex) {
        if (ex == null) {
            return false;
        }
        //使用Toast来显示异常信息
        getStackinfo(ex);

        return true;
    }



    private String getStackinfo(Throwable ex) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ex.printStackTrace(new PrintStream(baos));
        String exception = baos.toString();
        //记录本地日志
//        LogBackUtil.e("error->exception:" + exception);
        return exception;
    }
}
